package com.nantes.nantourage.app;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;

/**
 * Classe abstraite qui d�fnini les activit�s de l'application ASCT
 */
public abstract class ActivityBase extends Activity {

    /**
     * Retourne l'application qui g�re cette activit�
     * 
     * @return l'application courante
     */
    public SPApplication getSPApplication() {

        return (SPApplication) getApplication();
    }

    /**
     * M�thode qui ouvre une fen�tre popup en cas d'erreur
     * 
     * @param message le message � afficher
     */
    public void afficherMessageErreur(String message) {
        AlertDialog alertDialog = new AlertDialog.Builder(this).create();
        alertDialog.setTitle("Erreur");
        alertDialog.setMessage(message);
        alertDialog.setIcon(android.R.drawable.ic_dialog_alert);
        alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

                return;
            }
        });

        alertDialog.show();
    }

    /**
     * M�thode qui ouvre une fen�tre popup en cas d'erreur
     * 
     * @param message le message � afficher
     */
    public void afficherMessageErreur(String message, OnClickListener listener) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Erreur").setMessage(message).setIcon(android.R.drawable.ic_dialog_alert)
                .setNeutralButton("OK", listener);

        AlertDialog alert = builder.create();
        alert.show();
    }

    /**
     * utiliser afficherErreurTechnique(boolean closeActivity)
     */
    public void afficherErreurTechnique() {
        this.afficherErreurTechnique(false);
    }

    /**
     * Affiche le message d'erreur techniqye puis fermet l'activity courante (est surtout utilis�e pour les activity transparentes afin de ne pas figer l'application)
     * 
     * @param closeActivity
     */
    public void afficherErreurTechnique(boolean closeActivity) {
        if(closeActivity) {
            this.afficherMessageErreur("Erreur technique", new OnClickListener() {

                public void onClick(DialogInterface dialog, int which) {
                    finish();
                }
            });
        } else {
            this.afficherMessageErreur("Erreur technique");
        }
    }

    /**
     * M�thode qui ouvre une fen�tre popup d'info
     * 
     * @param message le message � afficher
     * @param listener l'action d�clench�e lors du clic sur le bouton "ok"
     */
    public void afficherMessageInformation(String message, OnClickListener listener) {

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Information").setMessage(message).setIcon(android.R.drawable.ic_dialog_info)
                .setNeutralButton("OK", listener);

        AlertDialog alert = builder.create();
        alert.show();
    }

    /**
     * M�thode qui affiche une fen�tre popup de demande de confirmation
     * 
     * @param messagele message � afficher
     * @param positiveListener l'action d�clench�e lors du clic sur le bouton "oui"
     */
    public void afficherMessageDemandeConfirmation(String message, OnClickListener positiveListener) {

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage(message).setCancelable(false).setPositiveButton("Oui", positiveListener)
                .setNegativeButton("Non", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.cancel();
                    }
                });
        AlertDialog alert = builder.create();
        alert.show();
    }

    /**
     * M�thode qui affiche une fen�tre popup de demande de confirmation
     * 
     * @param messagele message � afficher
     * @param positiveListener l'action d�clench�e lors du clic sur le bouton "oui"
     */
    public void afficherMessageDemandeConfirmation(String message, OnClickListener positiveListener,
            OnClickListener negativeListener) {

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage(message).setCancelable(false).setPositiveButton("Oui", positiveListener)
                .setNegativeButton("Non", negativeListener);
        AlertDialog alert = builder.create();
        alert.show();
    }

}
